﻿// pch.h: 这是预编译标头文件。
// 下方列出的文件仅编译一次，提高了将来生成的生成性能。
// 这还将影响 IntelliSense 性能，包括代码完成和许多代码浏览功能。
// 但是，如果此处列出的文件中的任何一个在生成之间有更新，它们全部都将被重新编译。
// 请勿在此处添加要频繁更新的文件，这将使得性能优势无效。

#ifndef PCH_H
#define PCH_H

// 添加要在此处预编译的标头
#include "framework.h"
#include "Q:\includes\ErrorCode.h"

#include <string>
#include <Windows.h>

#include <locale>
#include <codecvt>

/// <summary>
/// 紧急退出
/// </summary>
/// <param name="ExitCode">退出代码</param> 
#define EmergencyExit(ExitCode) RealEmergencyExit(ExitCode,__FILE__,__LINE__)

/// <summary>
/// 真正的紧急退出
/// </summary>
/// <param name="ExitCode">退出代码</param>
/// <param name="Source">宏__FILE__的值</param>
/// <param name="Line">宏__LINE__的值</param>
void RealEmergencyExit(
	int ExitCode,
	std::string Source, int Line
);

void ShowError(
	ErrorCode Code,
	std::string ErrorMessage,

	bool WriteLog = true
);

/// <summary>
/// 日志接口
/// </summary>
class LogProtocol {

	/// <summary>
	/// 启动日志服务，在“log\”中创建日志文件
	/// </summary>
	/// <param name="Title">日志标题，显示在日志文件中</param>
	/// <returns>成功返回true，失败返回false</returns>
public: static bool StartLogService(std::string Title);

	/// <summary>
	/// 启动日志服务，由用户自行指定日志文件路径
	/// </summary>
	/// <param name="LogFilePath">日志文件绝对路径</param>
	/// <param name="Title">日志标题，显示在日志文件中</param>
	/// <returns>成功返回true，失败返回false</returns>
public:static bool StartLogServiceEx(std::string LogFilePath, std::string Title);

	/// <summary>
	/// 停止日志服务
	/// </summary>
public:static void StopLogService();

	/// <summary>
	/// 检查日志服务是否开启
	/// </summary>
	/// <returns>开启返回true，关闭返回false</returns>
public:static bool CheckLogServiceInitStatus();

	/// <summary>
	/// 获取日志文件绝对路径
	/// </summary>
	/// <returns>成功返回路径，日志服务未开启返回""，失败抛出异常</returns>
public:static std::string GetLogFileFullPath();

public:static class WriteLog {
	/// <summary>
	/// 输出调试信息，不是DEBUG模式则不输出
	/// </summary>
	/// <param name="Message">欲输出的信息</param>
public:static void Debug(std::string Message);

	/// <summary>
	/// 输出普通信息
	/// </summary>
	/// <param name="Message">欲输出的信息</param>
public:static void Info(std::string Message);

	/// <summary>
	/// 输出警告信息
	/// </summary>
	/// <param name="Message">欲输出的信息</param>
public:static void Warning(std::string Message);

	/// <summary>
	/// 输出错误信息
	/// </summary>
	/// <param name="Message">欲输出的信息</param>
public:static void Error(std::string Message);
	};
};
#endif //PCH_H
